import axios from 'axios';
import router from '../router';
import {ElMessage} from 'element-plus'
// 引入Pinia的tokenStore
import { useTokenStore } from '../stores/tokenStore';

export default function (options) {

    // 从Pinia获取tokenStore实例
    const tokenStore = useTokenStore();

    //配置每次发送请求都从sessionStorage中获取名字叫token的数据,
    //添加到请求头部的Authorization属性中
    //Object.assign用于合并对象的数据

    // 配置请求头，使用Pinia中的token
    options.headers = Object.assign(
        // 使用tokenStore的getAuthHeader方法获取带Bearer前缀的token
        tokenStore.getAuthHeader() ? { Authorization: tokenStore.getAuthHeader() } : {},
        options.headers || {}
    );

    //axios()   返回一个promise对象，用于异步请求
    //options是一个对象，其中包含了许多用于配置请求的参数，
    //例如请求的url、请求方法（GET、POST等）、请求头等
    return axios(options)
        .then(({status, data, statusText}) => {
            //该函数在请求成功并返回数据时被调用
            //status：HTTP状态码，例如200表示请求成功。
            //data：服务器返回的数据。
            // statusText：HTTP状态文本，例如"OK"表示请求成功。
            if (status===200) {
                console.log(data);
                return data;
            } else {
                ElMessage.error('访问服务器出现异常')
            }
        })
        .then(({code, msg,data}) => {
            switch (code) {
                case 200:
                    if (msg)
                        ElMessage({
                            message: msg,
                            type: 'success',
                        })
                    return data;  //这里拆解后只返回data的数据，所以之后不用在逻辑中判断code了，调用方法后的返回值就是data的值
                case 401:
                    if( msg)
                        msg=msg||'认证失败,稍后跳转到登录页面'
                    ElMessage({
                        message: msg,
                        type: 'warning',
                    })
                    setTimeout(function(){
                        tokenStore.removeToken();
                        router.push("/login");
                    },1800);
                    break;
                default:
                if( msg)
                    ElMessage(msg)
            }
        }).catch(e => {
            ElMessage.error('系统出现异常,请联系管理员')
        });
}
